// ORIGINAL FILE IS HERE: D:\Dropbox\Development\Source\V3.0\SiteMajik.Generators\SiteMajik.Generators.CfProducers\DebugCf
// Look into this at sme time

//using System;
//using System.Globalization;
//using System.Text;
//using CodeFluent.Model.Production;
//using Framework;
//using Framework.FluentTextStringBuilder;

//namespace SiteMajik.Generators.CfProducers.DebugCf
//{
//    public static class DebugCodeFluent
//    {
//        public static ITextStringBuilderWriterFluent Write<T>(this ITextStringBuilderWriterFluent writerFluent, string title, T obj)
//        {
//            return writerFluent
//                .Divider(title)
//                .PublicProperties(obj)
//                ;
//        }
//        public static ITextStringBuilderWriterFluent NameValueLine(this ITextStringBuilderWriterFluent writerFluent, string title, Encoding value)
//        {
//            return writerFluent.NameValueLine(title, value == null ? "null" : value.ToString());
//        }

//        public static ITextStringBuilderWriterFluent ComplexOpenBegin(this ITextStringBuilderWriterFluent writerFluent, string name)
//        {
//            var format = writerFluent.Instance.DataGet<DebugFormat>("FormatAs");

//            writerFluent.Instance.DataSet("ClassName", name);

//            switch (format)
//            {
//                case DebugFormat.NameValue:
//                    writerFluent.Divider(name);
//                    break;
//                case DebugFormat.Xml:
//                    writerFluent.AddLine("<{0}".FormatWith(name)).IndentRight();
//                    break;
//                case DebugFormat.Html:
//                    break;
//            }

//            return writerFluent;
//        }
//        public static ITextStringBuilderWriterFluent ComplexOpenEnd(this ITextStringBuilderWriterFluent writerFluent, string name)
//        {
//            var format = writerFluent.Instance.DataGet<DebugFormat>("FormatAs");

//            switch (format)
//            {
//                case DebugFormat.NameValue:
//                    break;
//                case DebugFormat.Xml:
//                    writerFluent.AddLine(">".FormatWith(name)).IndentRight();
//                    break;
//                case DebugFormat.Html:
//                    break;
//            }

//            return writerFluent;
//        }
//        public static ITextStringBuilderWriterFluent ComplexClose(this ITextStringBuilderWriterFluent writerFluent, string name)
//        {
//            var format = writerFluent.Instance.DataGet<DebugFormat>("FormatAs");

//            switch (format)
//            {
//                case DebugFormat.NameValue:
//                    break;
//                case DebugFormat.Xml:
//                    writerFluent.IndentLeft(2).AddLine("</{0}>".FormatWith(name));
//                    break;
//                case DebugFormat.Html:
//                    break;
//            }

//            return writerFluent;
//        }

//        public static ITextStringBuilderWriterFluent Complex_(this ITextStringBuilderWriterFluent writerFluent, string name)
//        {
//            return writerFluent;
//        }

//        public static ITextStringBuilderWriterFluent Custom(this ITextStringBuilderWriterFluent writerFluent, string metadatafiles, MetaDataFileCollection metaDataFiles)
//        {
//            return writerFluent;
//        }

//        public static ITextStringBuilderWriterFluent Simple(this ITextStringBuilderWriterFluent writerFluent, string name, object value)
//        {
//            var format = writerFluent.Instance.DataGet<DebugFormat>("FormatAs");
            
//            string stringValue;

//            if (value == null)
//            {
//                stringValue = "null";
//            }
//            else if (value is Int32)
//            {
//                stringValue = ((Int32)value).ToString(CultureInfo.InvariantCulture);
//            }
//            else if (value is DateTime)
//            {
//                stringValue = value.ToString();
//            }
//            else if (value is UInt32)
//            {
//                stringValue = ((UInt32)value).ToString(CultureInfo.InvariantCulture);
//            }
//            else if (value is Boolean)
//            {
//                stringValue = ((Boolean)value).ToString(CultureInfo.InvariantCulture);
//            }
//            else if (
//                value is string
//                || value is Char
//                || value is Version
//                || value is CultureInfo
//                || value is Encoding
//                || value is Enum
//                || value is Guid
//                || value.GetType().IsEnum
//                )
//            {
//                stringValue = value as string;
//            }
//            else
//            {
//                _.P("Dealing with the unknown at the moment: {0}", value.GetType().FullName);
                
//                stringValue = value.GetType().FullName;    
//            }

//            switch (format)
//            {
//                case DebugFormat.NameValue:
//                    writerFluent.NameValueLine(name, stringValue);
//                    break;
//                case DebugFormat.Xml:
//                    writerFluent.AddLine("{0}='{1}'".FormatWith(name, stringValue));
//                    break;
//                case DebugFormat.Html:
//                    writerFluent.AddLine("<li><span class='name'>{0}</span><span class='value'>{1}</span></li>".FormatWith(name, stringValue));
//                    break;
//            }
//            return writerFluent;
//        }
//        private static ITextStringBuilderWriterFluent PublicProperties(this ITextStringBuilderWriterFluent value, object obj)
//        {
//            if (obj == null)
//            {
//                value.NameValueLine("", "null");
//            }
//            else
//            {
//                var pi = ReflectUtil.GetProperties(obj, ReflectUtil.BF_ANY_PUBLIC_PROP_FIELD);

//                foreach (var propertyInfo in pi)
//                {
//                    value.Simple(propertyInfo.Name, ReflectUtil.GetPropertyOrFieldValue(propertyInfo, propertyInfo.Name));
//                }
//            }
//            return value;
//        }
 
//    }
//}